package com.kabuda.zhugehot200;

/**
 * @author kabuda
 * @date 2025-03-23 20:13
 * @description
 */
public class t799_香槟塔 {
    public static void main(String[] args) {
        System.out.println(champagneTower(5, 2, 0));
        System.out.println(champagneTower(5, 2, 1));
        System.out.println(champagneTower(5, 2, 2));
    }

    /**
     * @param poured      倒酒的杯数
     * @param query_row   查询行数
     * @param query_glass 查询列数
     * @return
     */
    public static double champagneTower(int poured, int query_row, int query_glass) {
        double[][] ca = new double[query_row+1][query_row+1];
        ca[0][0] = poured;
        //只需要查询query_row行即可
        for (int i = 0; i < query_row; i++) {
            //在香槟塔中，列数=行数
            for (int j = 0; j <= i; j++) {
                //第一个是[0][0]，已经被赋值
                //如果该杯超过1才需要处理下面的杯子
                if (ca[i][j] > 1) {
                    double temp = (ca[i][j] - 1) / 2;
                    //i+1：下一行，j：下一列的左边
                    ca[i + 1][j] += temp;
                    //i+1：下一行，+1j：下一列的右边
                    ca[i + 1][j + 1] += temp;
                }
            }
        }
        //如果查询的酒量大于1，需要溢出到下面去，所以取1和剩余酒的最小值
        return Math.min(1,ca[query_row][query_glass]);
    }
}
